package qc.module.platform.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import qc.common.core.exception.QCPromptException;
import qc.module.platform.dto.dbTableColumn.DBTableColumnOptionsDto;
import qc.module.platform.dto.param.group.ParamGroupDto;
import qc.module.platform.dto.param.group.ParamGroupQueryConditionDto;
import qc.module.platform.dto.param.item.ParamItemDto;
import qc.module.platform.dto.param.item.ParamItemQueryConditionDto;
import qc.module.platform.dto.param.item.ParamOptionsDto;
import qc.module.platform.service.ParamService;

import java.util.List;

/**
 * 参数控制器，用于参数分组、参数项的配置
 *
 * @author QuCheng Tech
 * @since 2024/2/21
 */
@RestController
@RequestMapping("/param")
public class ParamController {
    
    @Autowired
    private ParamService service;

    /**
     * 查询参数分组
     * @param conditionDto 查询条件
     * @return 参数分组集合
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @RequestMapping(value = "/querygroup",method = {RequestMethod.GET,RequestMethod.POST})
    public List<ParamGroupDto> queryGroupByParam(@RequestBody ParamGroupQueryConditionDto conditionDto){
        return service.queryGroup(conditionDto);
    }

    /**
     * 获取指定参数分组信息 —— 支持RequestParam方式
     * @param id 参数分组编码
     * @return 参数分组信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @GetMapping("/getgroup")
    public ParamGroupDto getGroupByParam(@RequestParam String id) throws QCPromptException {
        return service.getGroup(id);
    }

    /**
     * 获取指定参数分组信息 —— 支持PathVariable方式
     * @param id 参数分组编码
     * @return 参数分组信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @GetMapping("/getgroup/{id}")
    public ParamGroupDto getGroupByPath(@PathVariable String id) throws QCPromptException {
        return service.getGroup(id);
    }

    /**
     * 新增参数分组
     * @param dto 新增参数分组对象
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @RequestMapping(value = "/addgroup",method = {RequestMethod.GET,RequestMethod.POST})
    public String addGroup(@RequestBody ParamGroupDto dto){
        return service.addGroup(dto);
    }

    /**
     * 修改参数分组
     * @param dto 修改参数分组对象
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @RequestMapping(value = "/updategroup",method = {RequestMethod.POST,RequestMethod.PUT})
    public String updateGroup(@RequestBody ParamGroupDto dto){
        return service.updateGroup(dto);
    }

    /**
     * 删除参数分组
     * @param id 参数分组编码
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @DeleteMapping("/deletegroup")
    public String deleteGroupByParam(@RequestParam String id){
        return service.deleteGroup(id);
    }

    /**
     * 删除参数分组
     * @param id 参数分组编码
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @DeleteMapping("/deletegroup/{id}")
    public String deleteGroupByPath(@RequestParam String id){
        return service.deleteGroup(id);
    }

    /**
     * 获取分组参数项
     * @param conditionDto 查询条件
     * @return 指定分组参数项集合
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @RequestMapping(value = "/getgroupitems",method = {RequestMethod.GET,RequestMethod.POST})
    public List<ParamItemDto> getGroupItems(@RequestBody ParamItemQueryConditionDto conditionDto) throws QCPromptException {
        return service.getGroupItems(conditionDto);
    }

    /**
     * 获取参数项信息
     * @param id 参数项ID
     * @return 参数项信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @GetMapping("/getitem")
    public ParamItemDto getItemByParam(@RequestParam String id) throws QCPromptException {
        return service.getItem(id);
    }

    /**
     * 获取参数项信息
     * @param id 参数项ID
     * @return 参数项信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @GetMapping("/getitem/{id}")
    public ParamItemDto getItemByPath(@PathVariable String id) throws QCPromptException {
        return service.getItem(id);
    }

    /**
     * 新增参数项
     * @param dto 新增对象
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @RequestMapping(value = "/additem",method = {RequestMethod.GET,RequestMethod.POST})
    public String addItem(@RequestBody ParamItemDto dto){
        return service.addItem(dto);
    }

    /**
     * 修改参数项
     * @param dto 修改对象
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @RequestMapping(value = "/updateitem",method = {RequestMethod.POST,RequestMethod.PUT})
    public String updateItem(@RequestBody ParamItemDto dto){
        return service.updateItem(dto);
    }

    /**
     * 删除参数项
     * @param id 参数项ID
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @DeleteMapping("/deleteitem")
    public String deleteItemByParam(@RequestParam String id) throws QCPromptException {
        return service.deleteItem(id);
    }

    /**
     * 删除参数项
     * @param id 参数项ID
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/14
     */
    @DeleteMapping("/deleteitem/{id}")
    public String deleteItemByPath(@PathVariable String id) throws QCPromptException {
        return service.deleteItem(id);
    }

    /**
     * 返回参数项的数据选择项集合
     * @return DBTableColumnOptionsDto
     * @author QuCheng Tech
     * @since 2024/4/15
     */
    @GetMapping("/getoptions")
    public ParamOptionsDto getOptions(){
        return service.getOptions();
    }
}
